www.gusucode.com > matlab最优化程序源码---书籍 > matlab最优化程序/光盘程序/第8章 约束优化问题/minJSMixFun.m

    function [x,minf] = minJSMixFun(f,g,h,x0,r0,c,var,eps)
gx0 = Funval(g,var,x0);
if gx0 >= 0
    ;
else
    disp('初始点必须满足不等式约束!');
    x = NaN;
    minf = NaN;
    return;
end

if r0 <= 0
    disp('初始障碍因子必须大于0!');
    x = NaN;
    minf = NaN;
    return;
end

if c >= 1 || c < 0
    disp('缩小系数必须大于0且小于1!');
    x = NaN;
    minf = NaN;
    return;
end

if nargin == 7
    eps = 1.0e-6;
end

FE = 0;
for i=1:length(g)
    FE = FE + 1/g(i);
end
FH = transpose(h)*h;

x1 = transpose(x0);
FF = r0*FE + FH/sqrt(r0);
SumF = f + FF ;
[x2,minf] = minNT(SumF,transpose(x1),var);

while 1
    FF = r0*FE + FH/sqrt(r0);
    SumF = f + FF ;
    a0 = (c*x1 - x2)/(c-1);
    x2 = a0  + (x1 - a0)*c^2;
    [x3,minf] = minNT(SumF,transpose(x2),var);

    if norm(x3 - x2)<=eps
        x = x3;
        break;
    else
        r0 = c*r0;
        x1 = x2;
        x2 = x3;
    end
end
minf = Funval(f,var,x);